package com.woniuxy.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import javax.jws.WebParam;
import java.util.List;
import java.util.Map;

/**
 * 这个类，就用来作为Manager用户管理的入口对象
 * <bean id="rbacManagerController" class="com.woniuxy.controller.RbacManagerController"/> 没有写id 默认的 Class类型的名称
 */
@Controller
//如果需要访问这个方法，则url需要变成：/manager/findUserSecond  通常类上需要添加这个
@RequestMapping("/user")
public class RbacManagerController {
    /**
     * 这里，是必须记住：@RequestMapping
     * 而ModelAndView则不需要去强行记忆，企业开发中，是不会直接显示地使用这个
     * @param id
     * @return
     */
    @RequestMapping(path="/findUser")
    public ModelAndView findUser(int id){
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("msg","您传入的id是："+id);
        modelAndView.setViewName("/WEB-INF/jsp/manager.jsp");
        return modelAndView;
    }

    /**
     * 了解 path是个数组格式，也可以使用下列写法 path={"/findUserSecond","/find2"}
     * 也可以使用*代替 作为通配符，企业开发是不使用，/manager/23r2r随便输入fsdf/findUserSecond
     * @param id
     * @return
     */
    @RequestMapping(path={"/*/findUserSecond","/find2"})
    public ModelAndView findUser2(int id){
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("msg","第二个方法您传入的id是："+id);
        //配置了一个视图解析器，然后就能够少些一些配置
        modelAndView.setViewName("manager");
        return modelAndView;
    }

    /**
     * 这个才是企业级开发需要同学们记住的东西
     * @return String 但是会通过视图解析器，对success解析成对应路径下的jsp页面
     */
    @RequestMapping(path="/success")
    public String successLogin(){
        return "success";
    }

    /**
     * 处理前端传来的信息
     * @param username
     * @return
     */
    @RequestMapping(value = "/addUser")
//    @GetMapping  只能接收get请求 等同于@RequestMapping(value = "/addUser",method = RequestMethod.GET) 这种写法
//    @PostMapping 只能接收post请求 等同于@RequestMapping(value = "/addUser",method = RequestMethod.POST)
    public ModelAndView formTest(@RequestParam("name") String username,@RequestParam("word") String password){
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("message","从前端获取到了参数name的值："+username+"；密码是"+password);
        modelAndView.setViewName("formBile");
        return modelAndView;
    }
    @RequestMapping(value = "/addInterest")
//    @GetMapping  只能接收get请求 等同于@RequestMapping(value = "/addUser",method = RequestMethod.GET) 这种写法
//    @PostMapping 只能接收post请求 等同于@RequestMapping(value = "/addUser",method = RequestMethod.POST)
//    这个形参的值，如果接收的是数值类型，后端可以使用int或者Integer包装类来接收，也可以使用String数组类型接收
    public ModelAndView formTest(@RequestParam List<Integer> ids){
        ModelAndView modelAndView = new ModelAndView();
        for (int id : ids) {
            System.out.println(id);
        }
        modelAndView.addObject("message","从前端获取到了参数ids的值："+ids);
        modelAndView.setViewName("formBile");
        return modelAndView;
    }
    @RequestMapping(value = "/addMap")
//    @GetMapping  只能接收get请求 等同于@RequestMapping(value = "/addUser",method = RequestMethod.GET) 这种写法
//    @PostMapping 只能接收post请求 等同于@RequestMapping(value = "/addUser",method = RequestMethod.POST)
//    这个形参的值，如果接收的是数值类型，后端可以使用int或者Integer包装类来接收，也可以使用String数组类型接收
    public ModelAndView formTest(@RequestParam Map<String,Object> user){
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("message","从前端获取到了参数的值："+user.toString());
        modelAndView.setViewName("formBile");
        return modelAndView;
    }
}
